package day7.zy6;

import java.io.*;
import java.net.URL;

public class Test {
//    ByteArrayInputStream 包含一个内部缓冲区，该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。
//
//    关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用，而不会产生任何 IOException。
//
//
//    public class ByteArrayOutputStream extends OutputStream
//此类实现了一个输出流，其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
//
//
//    关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用，而不会产生任何 IOException。
//
//
//
//    流的来源或目的地并不一定是文件，也可以是内存中的一块空间，例如一个字节数组。
//    java.io.ByteArrayInputStream、java.io.ByteArrayOutputStream
//
//    就是将字节数组当作流输入来源、输出目的地的类。
//
//
//    java.io.ByteArrayInputStream将一个字节数组当作流输入的来源，而java.io.ByteArrayOutputStream则可以将一个字节数组当作流输出目的地。
//
//
//    ByteArrayInputStream和ByteArrayOutputStream，用于以IO流的方式来完成对字节数组内容的读写，来支持类似内存虚拟文件或者内存映射文件的功能
public static void main(String[] args)
{
    try
    {
        URL url = new URL("http://www.baidu.com");
        InputStream in = url.openStream();
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[2048];
        int len = -1;
        while ((len = in.read(buffer)) != -1)
        {
            output.write(buffer, 0, len);
        }
        System.err.println(new String(output.toByteArray()));
    }
    catch(IOException ex)
    {
        ex.printStackTrace();
    }

}
}
